package br.com.idez.agenda.jsf.beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UISelectItems;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;

import br.com.idez.agenda.model.Contato;
import br.com.idez.agenda.model.GerenciadorDeContatos;
import br.com.idez.agenda.model.GerenciadorDeEnderecos;

@ManagedBean
@RequestScoped
public class AgendaBean {

	private Contato contato;
	
	private UISelectItems selectCidades;
	private HtmlDataTable datatable;
	
	private Boolean mostrarCidades;
	
	public AgendaBean() {
		contato = new Contato();
		selectCidades = new UISelectItems();
		selectCidades.setValue(new ArrayList<String>());
		mostrarCidades = false;
	}

	public Contato getContato() {
		return contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}
	
	public UISelectItems getSelectCidades() {
		return selectCidades;
	}

	public void setSelectCidades(UISelectItems selectCidades) {
		this.selectCidades = selectCidades;
	}

	public HtmlDataTable getDatatable() {
		return datatable;
	}

	public void setDatatable(HtmlDataTable datatable) {
		this.datatable = datatable;
	}

	public String cadastrarContato(){
		GerenciadorDeContatos.INSTANCE.adicionarContato(contato);
		return "listarContatos";
	}

	public String removerContato(){
		this.contato = (Contato) datatable.getRowData();
		GerenciadorDeContatos.INSTANCE.removerContato(this.contato);
		return null;
	}
	
	public List<Contato> getContatos(){
		return GerenciadorDeContatos.INSTANCE.listarTodosOsContatos();
	}
	
	public List<String> getEstados(){
		return GerenciadorDeEnderecos.INSTANCE.obterTodosOsEstados();
	}
	
	public Boolean getMostrarCidades() {
		return mostrarCidades;
	}

	public void estadoMudou( ValueChangeEvent event ){
		String novoEstado = (String) event.getNewValue();
		
		if ( ( novoEstado == null ) || ( novoEstado.equals("") ) ){
			mostrarCidades = false;
		} else {
			mostrarCidades = true;
		}
		
		List<String> cidades = 
			GerenciadorDeEnderecos.INSTANCE.obterCidades(novoEstado);
		selectCidades.setValue(cidades);
		
		FacesContext.getCurrentInstance().renderResponse();
	}
}




